/**
 * @author ZhangHuihua@msn.com
 * 
 */
(function($) {
	$.fn.extend({

		/**
		 * options: reverse[true, false], eventType[click, hover],
		 * currentIndex[default index 0] stTab[tabs selector], stTabPanel[tab
		 * panel selector] ajaxClass[ajax load], closeClass[close tab]
		 */
		tabs : function(options) {
			var op = $.extend({
						reverse : false,
						eventType : "click",
						currentIndex : 0,
						stTabHeader : "> .tabsHeader",
						stTab : ">.tabsHeaderContent>ul",
						stTabPanel : "> .tabsContent",
						ajaxClass : "j-ajax",
						closeClass : "close",
						prevClass : "tabsLeft",
						nextClass : "tabsRight"
					}, options);

			return this.each(function() {
						initTab($(this));
					});

			function initTab(jT) {
				var jSelector = jT.add($("> *", jT));
				var jTabHeader = $(op.stTabHeader, jSelector);
				var jTabs = $(op.stTab + " li", jTabHeader);
				var jGroups = $(op.stTabPanel + " > *", jSelector);

				jTabs.unbind().find("a").unbind();
				jTabHeader.find("." + op.prevClass).unbind();
				jTabHeader.find("." + op.nextClass).unbind();

				jTabs.each(function(iTabIndex) {
							if (op.currentIndex == iTabIndex)
								$(this).addClass("selected");
							else
								$(this).removeClass("selected");

							if (op.eventType == "hover")
								$(this).hover(function(event) {
											switchTab(jT, iTabIndex)
										});
							else
								$(this).click(function(event) {
											switchTab(jT, iTabIndex)
										});

							$("a", this).each(function() {
								if ($(this).hasClass(op.ajaxClass)) {
									$(this).click(function(event) {
										var jGroup = jGroups.eq(iTabIndex);
										if (this.href && !jGroup.attr("loaded"))
											jGroup.loadUrl(this.href, {},
													function() {
														jGroup
																.find("[layoutH]")
																.layoutH();
														jGroup.attr("loaded",
																true);
													});
										event.preventDefault();
									});

								} else if ($(this).hasClass(op.closeClass)) {
									$(this).click(function(event) {
										jTabs.eq(iTabIndex).remove();
										jGroups.eq(iTabIndex).remove();
										if (iTabIndex == op.currentIndex) {
											op.currentIndex = (iTabIndex + 1 < jTabs
													.size())
													? iTabIndex
													: iTabIndex - 1;
										} else if (iTabIndex < op.currentIndex) {
											op.currentIndex = iTabIndex;
										}
										initTab(jT);
										return false;
									});
								}
							});
						});

				switchTab(jT, op.currentIndex);
			}

			function switchTab(jT, iTabIndex) {
				var jSelector = jT.add($("> *", jT));
				var jTabHeader = $(op.stTabHeader, jSelector);
				var jTabs = $(op.stTab + " li", jTabHeader);
				var jGroups = $(op.stTabPanel + " > *", jSelector);

				var jTab = jTabs.eq(iTabIndex);
				var jGroup = jGroups.eq(iTabIndex);
				if (op.reverse && (jTab.hasClass("selected"))) {
					jTabs.removeClass("selected");
					jGroups.hide();
				} else {
					op.currentIndex = iTabIndex;
					jTabs.removeClass("selected");
					jTab.addClass("selected");

					jGroups.hide().eq(op.currentIndex).show();
				}

				if (!jGroup.attr("inited")) {
					jGroup.attr("inited", 1000).find("input[type=text]")
							.filter("[alt]").inputAlert();
				}
			}

		}
	});
})(jQuery);